/*
计算机学院2013级的院草语文难同学是软院院花牟黑黑爱慕的对象，因此牟黑黑经常约楠神去逛街，楠神不喜欢陪牟黑黑逛街，但是不得不从啊。所以在牟黑黑逛街的时候他就无聊的用眼睛识别条形码 。

在生活中，条形码经常用来标志物品的信息。条形码是由黑白相间的条组成的。条的宽度有两种，我们可以认为窄的代表0，宽的代表1。本题中设定宽条的宽度是窄条的两倍。

楠神拥有很强的DIY精神，他决定做一个条形码识别工具。首先他完成了图像识别部分，得到了一系列条的宽度。他希望将这些宽度识别为一个01串。本来这是一个非常简单的任务，可是由于楠神在识别的时候会有误差，使得问题变得没那么简单了。不过楠神认为测量得到的结果最多比真实值大或小5%。请你帮忙完成这个识别程序。已知条形码中至少有一个是宽条，可能没有窄条。

输入第一行为一个数字n（n < 20），表示楠神识别出了n个条。

	第二行为n个正整数，均不大于10 ^ 8。

	输出为一个长度为n的01串，宽条对应1，窄条对应0。如果有些条偏差的超过了限制，输出“Bad Barcodes”
*/

#ifdef _MSC_VER
#define _CRT_SECURE_NO_WARNINGS
#endif
#if defined(_WIN32) && !defined(__cplusplus)
#define inline __inline
#endif

#include <stdio.h>

#define max(a,b)    (((a) > (b)) ? (a) : (b))
#define min(a,b)    (((a) < (b)) ? (a) : (b))

typedef int		BOOL;
#define TRUE	1
#define FALSE	0

typedef struct {
	int Index;
	int Value;
	BOOL Wide;
}Barcode;

#define Barcodes_Max_Num 20

int main()
{

	Barcode barcodes[Barcodes_Max_Num] = {{0,0,0}};

	int n;
	scanf("%d", &n);

	int Max = 0;
	int Min = 0x7FFFFFFF;
	for (int i = 0; i < n; i++)
	{
		scanf("%d", &barcodes[i].Value);
		barcodes[i].Index = i;
		Max = max(Max, barcodes[i].Value);
		Min = min(Min, barcodes[i].Value);
	}


	double half = (Max + Min) / 2.0;
	if(Min / 0.95 >= half)
	{
		for (int i = 0; i < n; i++)
		{
			printf("1");
		}
		printf("\n");
		goto end;
	}


	for (int i = 0; i < n; i++)
	{
		barcodes[i].Wide = barcodes[i].Value > half ? TRUE : FALSE;
	}


	for (int i = 0; i < n; i++)
	{
		if(barcodes[i].Value < half)
		{
			barcodes[i].Value *= 2;
		}
	}

	Max = 0;
	Min = 0x7FFFFFFF;
	for (int i = 0; i < n; i++)
	{
		Max = max(Max, barcodes[i].Value);
		Min = min(Min, barcodes[i].Value);
	}

	if(Min / 0.95 < Max / 1.05)
	{
		printf("Bad Barcodes\n");
		goto end;
	}

	for (int i = 0; i < n; i++)
	{
		printf("%d", barcodes[i].Wide);
	}
	printf("\n");

end:
	fflush(stdin);
	getchar();

	return 0;
}